package com.basin.common.core.util;

/**
 * @author: Sam ZHONG | sammy1997@aliyun.com
 */
public final class NamingConvertUtil {
    private NamingConvertUtil() {
    }

    /**
     * 将蛇形命名（snake_case）转换为驼峰命名（camelCase）
     *
     * @param snakeCase 输入的蛇形命名字符串
     * @return 转换后的驼峰命名字符串
     */
    public static String toCamelCase(String snakeCase) {
        if (snakeCase == null || snakeCase.isEmpty()) {
            return snakeCase;
        }

        // 使用StringBuilder来构建结果字符串，因为它比字符串连接更高效
        StringBuilder camelCase = new StringBuilder();

        // 标记是否已经转换过第一个单词，初始为false
        boolean firstWord = true;

        // 遍历输入字符串的每一个字符
        for (char c : snakeCase.toCharArray()) {
            // 如果当前字符是下划线，则跳过它，并设置firstWord为false（表示下一个单词的首字母需要大写）
            if (c == '_') {
                firstWord = false;
                continue;
            }

            // 根据是否是第一个单词或下划线后的单词来决定是否大写
            if (!firstWord) {
                camelCase.append(Character.toUpperCase(c));
                firstWord = true; // 重置为true，表示当前字符是单词的首字母
            } else {
                camelCase.append(Character.toLowerCase(c));
            }
        }

        return camelCase.toString();
    }
}
